关键字POI搜索 Sample详情
最后更新时间:2019年7月5日
POI查询的关键字搜索方式,即根据用户输入的关键字、选择的类型进行模糊查询,搜索满足条件的POI信息点,可以通过标注、绘制或者列表方式展示查询到的兴趣点。
在进行POI查询之前,需准备POI数据,详细步骤参考POI数据组织模块,在此不赘述,接下来讲解具体的关键字搜索的编码实现方法。
1
首先,创建并初始化POI查询对象,设置POI数据。
//创建POI查询对象 MGSPoiSearch *poiSearch=[[MGSPoiSearch alloc] init]; NSString *poiDbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"/MapGIS Mobile 2D Sample/POI/WuhanPOI.db"]; //POI数据路径 //为POI查询对象设置配置好的.db数据,并以此来初始化 [poiSearch initWithDBPath:poiDbPath]; //设置查询每页的结果数目 [poiSearch setPageSize:40];
2
进行关键字POI搜索,需要在查询之前设置条件,首先构造查询条件对象MGSQuery,然后利用其接口设置查询的关键字,还可以设置查询的POI类型。代码调用如下所示,在此给定查询关键字为“武汉”,查询类型为MAPSERVER _ TYPE _ TOURISTATTRACTIOIN(景点),将查询得到包含关键字为武汉的景点POI点。当然也可查询多种类型。
//构造POI查询条件对象 MGSQuery *poiQuery=[[MGSQuery alloc] initWithCityCode:@"武汉" category:MAPSERVER_TYPE_TOURISTATTRACTIOIN cityCode:nil]; //设置给查询对象 [poiSearch setQuery:poiQuery];
代码说明:MGSQueryy的第一个参数为查询关键字的字符串;第二个参数为POI类型的组合,此为景点类型(MAPSERVER _ TYPE _ TOURISTATTRACTIOIN),也可定义组合(如餐馆 + 电影院 + 景点)。
SDK中提供的POI具体分类如下表所示,由MGSPoiTypeDef的字段提供,用户可以根据自己需要选择,在实际项目应用中,可以将这些类型以列表或其他形式展示给终端用户,从而让用户自行选择类型。
POI一级分类 | POI二级分类 | PoiTypeDef字段 |
---|---|---|
所有POI类型 | 类型的全集 | POI_TYPE_ALL |
住宿服务 | 宾馆 | POI_TYPE_OGC_ACCOMMODATION |
汽车服务 | 加油站 | POI_TYPE_AUTOCARSERVICE |
科教文化 | 学校 | POI_TYPE_EDUCATION |
餐饮服务 | 中餐厅 | POI_TYPE_FOODBEVERAGES |
体育休闲服务 | 娱乐场所,网吧 | POI_TYPE_INTERNETBAR |
医疗相关服务 | 综合医院 | POI_TYPE_OGC_MEDICALSERVICE |
公共设施 | 公共厕所 | POI_TYPE_PUBLICSERVICE |
交通设施服务 | 停车场 | POI_TYPE_PUBLICPARKINGLOT |
地铁站 | POI_TYPE_PUBLICSUBWAY | |
公交车站 | POI_TYPE_PUBLICTRANSPORTATION | |
购物中心 | 商场 | POI_TYPE_SHOPPING |
超市 | POI_TYPE_SUPERMARKET | |
风景名胜 | 景点 | MAPSERVER_TYPE_TOURISTATTRACTIOIN |
3
查询POI,遍历查询结果,并以文本图形、标注形式展示,核心代码如下:
//查询POI MGSPoiPagedResult *poiPagedResult=[poiSearch searchPOI]; if (poiPagedResult != nil && poiPagedResult.totalPOICount > 0) { for (int i=1; i<=poiPagedResult.pageCount; i++) { //只获取第1页结果 NSArray<MGSPoiItem *> *poiItemArr=[poiPagedResult getPageWithPageNumber:i]; for (int j=0; j<[poiItemArr count]; j++) { //获取POI项 MGSPoiItem *poiItem=poiItemArr[j]; //获取坐标点 MGSDot dot=[poiItem point]; //经纬度转Web墨卡托 [MGSSpaProjection lonLat2Mercator:&dot]; //POI名称、电话、地址、行政区划代码、类型代码 NSString *name=[poiItem name]; NSString *tel=[poiItem tel]; NSString *address=[poiItem address]; NSString *adCode=[poiItem adCode]; NSString *typeCode=[poiItem typeCode]; } } } else { NSLog(@"未查询到结果"); }
查询到POI结果后,可以通过文本图形、地图标注进行展示:
//文字图形 MGSGraphicText *graphicText=[[MGSGraphicText alloc] initWithPoint:dot text:name anchorPoint:CGPointMake(0.5f, 1.0f) fontSize:25 slopeFlag:NO]; [graphicText setColor:[UIColor blueColor]]; //添加标注 UIImage *image=[UIImage imageNamed:@"location"]; MGSAnnotation *annotation=[[MGSAnnotation alloc] initAnnotationWithTitle:name description:description point:dot image:image]; //绘制 [_mapView.graphicsOverlay addGraphic:graphicText]; [_mapView.annotationsOverlay addAnnotation:annotation]; [_mapView refresh];
展示效果如下图所示: